/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.jjsoft.celularessuc.gco.neg;

import com.jjsoft.celularessuc.gco.dao.GenericController;
import com.jjsoft.celularessuc.gco.mdl.Cliente;
import com.jjsoft.celularessuc.gco.mdl.DeudaCliente;
import com.jjsoft.celularessuc.gco.mdl.Mensualidad;
import com.jjsoft.celularessuc.gco.mdl.Sucursal;
import com.jjsoft.celularessuc.gco.util.AtributoInvalidoException;
import com.jjsoft.celularessuc.gco.util.CNumeros;
import com.jjsoft.celularessuc.gco.util.DeudaClienteValidadorException;
import com.jjsoft.celularessuc.gco.util.ValidarAtributoUtil;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author javila
 */


public class DeudaClienteManager {
    GenericController<DeudaCliente> controladorDeuda = new GenericController<DeudaCliente>();
    GenericController<Mensualidad> controladorMensualidad = new GenericController<Mensualidad>();
    public void guardarDeuda(DeudaCliente deuda) throws DeudaClienteValidadorException
    {
        try{
            ValidarAtributoUtil.validarObjetoNulo("Cliente", deuda.getCedulaCliente());
            ValidarAtributoUtil.validarDoubleCero("Monto", deuda.getMontoInicial());
            ValidarAtributoUtil.validarDoubleNegativo("Monto", deuda.getMontoInicial());   
        }catch (AtributoInvalidoException ex)
        {
            throw new DeudaClienteValidadorException(ex);
        }
        controladorDeuda.create(deuda);
    }
    
    public void guardarDeudaMensualidad(DeudaCliente deuda, List<Mensualidad> listaPagos) throws DeudaClienteValidadorException
    {
        try{
            ValidarAtributoUtil.validarObjetoNulo("Cliente", deuda.getCedulaCliente());
            ValidarAtributoUtil.validarDoubleCero("Monto", deuda.getMontoInicial());
            ValidarAtributoUtil.validarDoubleNegativo("Monto", deuda.getMontoInicial());   
        }catch (AtributoInvalidoException ex)
        {
            throw new DeudaClienteValidadorException(ex);
        }
        controladorDeuda.create(deuda);
        for(Mensualidad pago: listaPagos)
        {
            controladorMensualidad.create(pago);
        }
        
    }
    
    public void reducirSaldo(DeudaCliente deuda, Double abono) {
        deuda.setSaldoActual(CNumeros.redondear(deuda.getSaldoActual() - abono));
        if (deuda.getSaldoActual() == 0) {
            deuda.setEstado(0);
        }
        try {
            controladorDeuda.edit(deuda);
        } catch (Exception ex) {
            Logger.getLogger(DeudaProveedorManager.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    public List<DeudaCliente> listarPorCliente(Cliente cliente)
    {
        return controladorDeuda.findWhere(new DeudaCliente(), "cedula_cliente='"+cliente.getCedula()+"' order by fecha");
    }
    public List<DeudaCliente> listarPorCliente(Cliente cliente, Sucursal sucursal)
    {
        return controladorDeuda.findWhere(new DeudaCliente(), "cedula_cliente='"+cliente.getCedula()+"' and id_sucursal="+sucursal.getIdsucursal()+ " order by fecha");
    }
    public List<DeudaCliente> listarPorCliente(Cliente cliente, Sucursal sucursal, int  estado)
    {
        return controladorDeuda.findWhere(new DeudaCliente(), "cedula_cliente='"+cliente.getCedula()+"' and id_sucursal="+sucursal.getIdsucursal()+ "and estado="+estado+" order by fecha");
    }
    public List<DeudaCliente> listarPorCliente(Cliente cliente, int  estado)
    {
        return controladorDeuda.findWhere(new DeudaCliente(), "cedula_cliente='"+cliente.getCedula()+"' and estado="+estado+" order by fecha");
    }
    
    public List<DeudaCliente> listarPorSucursal(Sucursal sucursal)
    {
        return controladorDeuda.findWhere(new DeudaCliente(), "id_sucursal="+sucursal.getIdsucursal()+" order by fecha");
    }
    
    public List<DeudaCliente> listarPorEstado(int estado)
    {
        return controladorDeuda.findWhere(new DeudaCliente(), "estado="+estado+" order by fecha");
    }
    public List<DeudaCliente> listarPorEstado(int estado, Sucursal sucursal)
    {
        return controladorDeuda.findWhere(new DeudaCliente(), "id_sucursal="+sucursal.getIdsucursal()+" and estado="+estado+" order by fecha");
    }
    
    public List<DeudaCliente> listaDeudasVencidas()
    {
        return controladorDeuda.findWhere(new DeudaCliente(), "estado=1 and fecha_vencimiento < current_date order by fecha");
    }
    public List<DeudaCliente> listaDeudasVencidas(Sucursal sucursal)
    {
        return controladorDeuda.findWhere(new DeudaCliente(), "id_sucursal = "+sucursal.getIdsucursal()+" and estado=1 and fecha_vencimiento < current_date order by fecha");
    }
    public List<DeudaCliente> listaDeudasVencidas(Cliente cliente)
    {
        return controladorDeuda.findWhere(new DeudaCliente(), "cedula_cliente='"+cliente.getCedula()+"' and estado=1 and fecha_vencimiento < current_date order by fecha");
    }
    public List<DeudaCliente> listaDeudasVencidas(Cliente cliente, Sucursal sucursal)
    {
        return controladorDeuda.findWhere(new DeudaCliente(), "cedula_cliente='"+cliente.getCedula()+"' and id_sucursal="+sucursal.getIdsucursal()+" and estado=1 and fecha_vencimiento < current_date order by fecha");
    }
    public List<DeudaCliente> listarTodas(){
        return controladorDeuda.findWhere(new DeudaCliente(), "id_deuda>0 order by fecha");
    }
    
    

    
}
